package com.sqq.testdemo.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.sqq.testdemo.R;

public class IntentTestActivity extends Activity {

    Button btn_Explicit, btn_Implicit,btnIntent_Explicit,btnIntent_Implicit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_test);

        btnIntent_Explicit = (Button) findViewById(R.id.btnIntent_Explicit);
        btnIntent_Implicit = (Button) findViewById(R.id.btnIntent_Implicit);
        btn_Explicit = (Button) findViewById(R.id.btn_Explicit);
        btn_Implicit = (Button) findViewById(R.id.btn_Implicit);

        //对按钮添加事件监听器
        btnIntent_Explicit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(IntentTestActivity.this,IntentExplicitActivity.class);
                startActivity(intent);
            }
        });
        btnIntent_Implicit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.sqq.testdemo.ACTION_START");
                startActivity(intent);
            }
        });

        btn_Explicit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                finish();
                String desc = "     显式Intent：通过指定Intent组件名称来实现的，" +
                        "它一般用在知道目标组件名称的前提下，去调用Intent.setComponent()/Intent.setClassName()" +
                        "或Intent.setClass()方法 或者在new Intent(A.this,B.class)指明需要转向到的Activity，" +
                        "显式意图明确指定了要激活的组件是哪个组件，一般是在相同的应用程序内部实现的。" +
                        "   显式Intent有点是效率高，系统直接精确定位要启用的组件，但耦合度也高，" +
                        "如果通过这种方式调用一些系统组件的话，容易因为版本更新，类名、包名、包结构变化等原因导致程序崩溃。";
                showDialog(desc);
            }
        });
        btn_Implicit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                finish();
                String desc = "     隐式Intent：通过Intent Filter来实现的，它一般用在没有明确指出目标组件名称的前提下。" +
                        "Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据（URI和数据类型）" +
                        "找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间。" +
                        "   隐式Intent能够降低程序的耦合度，但由于每次意图执行的时候，系统都会搜索所有可用的intentfilter，" +
                        "来查看是否有匹配的内容，所以效率更低。所以具体的使用还要看具体的情况。";
                showDialog(desc);
            }
        });
    }

    private void showDialog(String description) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("简单介绍");
        builder.setMessage(description);
        builder.show();
    }
}
